// ---- Created with 3Dmigoto v1.3.16 on Tue May 19 13:08:58 2026
cbuffer cb2 : register(b2)
{
  float4 cb2[7];
}

cbuffer cb1 : register(b1)
{
  float4 cb1[4];
}

cbuffer cb0 : register(b0)
{
  float4 cb0[98];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);

#define PARRY_RGB IniParams[151].xyz
#define PARRY_INTENSITY IniParams[151].w
#define NO_PARRY_RGB IniParams[152].xyz
#define NO_PARRY_INTENSITY IniParams[152].w

// Helper functions

// Compare if 2 sRGB colors are the same
bool IsSpecificColor(float3 color, float3 targetColor)
{
  return all(abs(color - targetColor) < 0.00390625f);
}

// Removes sRGB Gamma
float3 RGBToLinear(float3 rgb)
{
  return float3(
    (rgb.r <= 0.04045f) ? (rgb.r * 0.077399381f) : pow((rgb.r + 0.055f) * 0.94786730f, 2.4f),
    (rgb.g <= 0.04045f) ? (rgb.g * 0.077399381f) : pow((rgb.g + 0.055f) * 0.94786730f, 2.4f),
    (rgb.b <= 0.04045f) ? (rgb.b * 0.077399381f) : pow((rgb.b + 0.055f) * 0.94786730f, 2.4f)
  );
}

// Applies sRGB Gamma
float3 LinearToRGB(float3 lin)
{
  return float3(
    (lin.r <= 0.0031308f) ? (12.92f * lin.r) : (1.055f * pow(lin.r, 0.41666667f) - 0.055f),
    (lin.g <= 0.0031308f) ? (12.92f * lin.g) : (1.055f * pow(lin.g, 0.41666667f) - 0.055f),
    (lin.b <= 0.0031308f) ? (12.92f * lin.b) : (1.055f * pow(lin.b, 0.41666667f) - 0.055f)
  );
}


void main(
  float3 v0 : POSITION0,
  float4 v1 : COLOR0,
  float4 v2 : TEXCOORD0,
  float3 v3 : TEXCOORD1,
  out float4 o0 : SV_POSITION0,
  out float4 o1 : TEXCOORD0,
  out float4 o2 : TEXCOORD1)
{
  float4 r0,r1,r2;
  uint4 bitmask, uiDest;
  float4 fDest;
  
  
    // Custom Code
  o1.zw = 0; // Suppress uninitialized warning from original code

  float3 rgb = LinearToRGB(saturate(v1.rgb));
  
  // Parryable - 255, 140, 0
  if (IsSpecificColor(rgb, float3(1.000f, 0.549f, 0.000f)))
    v1.rgb = RGBToLinear(saturate(PARRY_RGB)) * PARRY_INTENSITY;
  
  // Not Parryable - 255, 22, 22
  else if (IsSpecificColor(rgb, float3(1.000f, 0.086f, 0.086f)))
    v1.rgb = RGBToLinear(saturate(NO_PARRY_RGB)) * NO_PARRY_INTENSITY;

  // Original Code
  
  

  r0.xyz = cb1[1].xyz * v2.www;
  r0.xyz = cb1[0].xyz * v2.zzz + r0.xyz;
  r0.xyz = cb1[2].xyz * v3.xxx + r0.xyz;
  r0.xyz = cb1[3].xyz + r0.xyz;
  r0.yw = cb0[95].xy * r0.yy;
  r0.xy = cb0[94].xy * r0.xx + r0.yw;
  r0.xy = cb0[96].xy * r0.zz + r0.xy;
  r0.xy = cb0[97].xy + r0.xy;
  r1.xyz = cb1[1].xyz * v0.yyy;
  r1.xyz = cb1[0].xyz * v0.xxx + r1.xyz;
  r1.xyz = cb1[2].xyz * v0.zzz + r1.xyz;
  r1.xyz = cb1[3].xyz + r1.xyz;
  r2.xyz = cb0[95].xyz * r1.yyy;
  r1.xyw = cb0[94].xyz * r1.xxx + r2.xyz;
  r1.xyz = cb0[96].xyz * r1.zzz + r1.xyw;
  r1.xyz = cb0[97].xyz + r1.xyz;
  r0.zw = r1.xy + -r0.xy;
  r0.zw = r0.zw * -r1.zz;
  r0.zw = r0.zw / cb0[71].yy;
  r1.xy = r0.zw * float2(2,2) + r0.xy;
  r0.x = dot(r1.xyz, r1.xyz);
  r0.x = rsqrt(r0.x);
  r0.xyz = r1.xyz * r0.xxx;
  r0.xyz = r0.xyz * cb2[4].www + r1.xyz;
  r1.x = cb0[90].z;
  r1.y = cb0[91].z;
  r1.z = cb0[92].z;
  r1.w = cb0[93].z;
  r0.w = 1;
  o0.z = dot(r1.xyzw, r0.xyzw);
  r1.x = cb0[90].x;
  r1.y = cb0[92].x;
  r1.z = cb0[93].x;
  o0.x = dot(r1.xyz, r0.xzw);
  r1.x = cb0[91].y;
  r1.y = cb0[92].y;
  r1.z = cb0[93].y;
  o0.y = dot(r1.xyz, r0.yzw);
  r0.x = cb0[92].w;
  r0.y = cb0[93].w;
  o0.w = dot(r0.xy, r0.zw);
  r0.x = cmp(0.5 < cb2[6].z);
  r0.x = r0.x ? cb0[14].x : cb0[17].y;
  r0.xy = r0.xx * cb2[5].yz + v3.yz;
  r0.z = cmp(0.5 < cb2[5].x);
  r0.xy = r0.zz ? r0.xy : 0;
  r0.zw = v2.xy * cb2[0].xy + cb2[0].zw;
  o1.xy = r0.zw + r0.xy;
  o2.xyzw = cb2[2].xyzw * v1.xyzw;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.3.16 on Tue May 19 13:08:58 2026
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION                 0   xyz         0     NONE   float   xyz
// COLOR                    0   xyzw        1     NONE   float   xyzw
// TEXCOORD                 0   xyzw        2     NONE   float   xyzw
// TEXCOORD                 1   xyz         3     NONE   float   xyz
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float   xyzw
// TEXCOORD                 0   xy          1     NONE   float   xy
// TEXCOORD                 1   xyzw        2     NONE   float   xyzw
//
vs_4_0
dcl_constantbuffer CB0[98], immediateIndexed
dcl_constantbuffer CB1[4], immediateIndexed
dcl_constantbuffer CB2[7], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xyzw
dcl_input v2.xyzw
dcl_input v3.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xy
dcl_output o2.xyzw
dcl_temps 3
mul r0.xyz, v2.wwww, cb1[1].xyzx
mad r0.xyz, cb1[0].xyzx, v2.zzzz, r0.xyzx
mad r0.xyz, cb1[2].xyzx, v3.xxxx, r0.xyzx
add r0.xyz, r0.xyzx, cb1[3].xyzx
mul r0.yw, r0.yyyy, cb0[95].xxxy
mad r0.xy, cb0[94].xyxx, r0.xxxx, r0.ywyy
mad r0.xy, cb0[96].xyxx, r0.zzzz, r0.xyxx
add r0.xy, r0.xyxx, cb0[97].xyxx
mul r1.xyz, v0.yyyy, cb1[1].xyzx
mad r1.xyz, cb1[0].xyzx, v0.xxxx, r1.xyzx
mad r1.xyz, cb1[2].xyzx, v0.zzzz, r1.xyzx
add r1.xyz, r1.xyzx, cb1[3].xyzx
mul r2.xyz, r1.yyyy, cb0[95].xyzx
mad r1.xyw, cb0[94].xyxz, r1.xxxx, r2.xyxz
mad r1.xyz, cb0[96].xyzx, r1.zzzz, r1.xywx
add r1.xyz, r1.xyzx, cb0[97].xyzx
add r0.zw, -r0.xxxy, r1.xxxy
mul r0.zw, -r1.zzzz, r0.zzzw
div r0.zw, r0.zzzw, cb0[71].yyyy
mad r1.xy, r0.zwzz, l(2.000000, 2.000000, 0.000000, 0.000000), r0.xyxx
dp3 r0.x, r1.xyzx, r1.xyzx
rsq r0.x, r0.x
mul r0.xyz, r0.xxxx, r1.xyzx
mad r0.xyz, r0.xyzx, cb2[4].wwww, r1.xyzx
mov r1.x, cb0[90].z
mov r1.y, cb0[91].z
mov r1.z, cb0[92].z
mov r1.w, cb0[93].z
mov r0.w, l(1.000000)
dp4 o0.z, r1.xyzw, r0.xyzw
mov r1.x, cb0[90].x
mov r1.y, cb0[92].x
mov r1.z, cb0[93].x
dp3 o0.x, r1.xyzx, r0.xzwx
mov r1.x, cb0[91].y
mov r1.y, cb0[92].y
mov r1.z, cb0[93].y
dp3 o0.y, r1.xyzx, r0.yzwy
mov r0.x, cb0[92].w
mov r0.y, cb0[93].w
dp2 o0.w, r0.xyxx, r0.zwzz
lt r0.x, l(0.500000), cb2[6].z
movc r0.x, r0.x, cb0[14].x, cb0[17].y
mad r0.xy, r0.xxxx, cb2[5].yzyy, v3.yzyy
lt r0.z, l(0.500000), cb2[5].x
and r0.xy, r0.xyxx, r0.zzzz
mad r0.zw, v2.xxxy, cb2[0].xxxy, cb2[0].zzzw
add o1.xy, r0.xyxx, r0.zwzz
mul o2.xyzw, v1.xyzw, cb2[2].xyzw
ret
// Approximately 0 instruction slots used

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
